home *** CD-ROM | disk | FTP | other *** search
/ PC World 2001 March / PCWorld_2001-03_cd.bin / Software / TemaCD / classbuild / ClassBuilder 2.2 PR405 Setup.exe / {app} / Include / CB_CriticalMultiOwned.h < prev    next >
C/C++ Source or Header  |  2000-04-06  |  17KB  |  450 lines

  1. #ifndef CB_CRITICAL_MULTI_OWNED_H
  2. #define CB_CRITICAL_MULTI_OWNED_H
  3.  
  4. #include "CB_CriticalMulti.h"
  5. #include "CB_MultiOwned.h"
  6.  
  7. // defines for include files
  8. #define RELATION_TEMPLATE_CRITICAL_MULTI_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  9. public:\
  10.     ClassTo* _first##NameTo;\
  11.     ClassTo* _last##NameTo;\
  12.     int _count##NameTo;\
  13. \
  14.     static CriticalSection& CriticalSection##NameTo()\
  15.     {\
  16.         static CriticalSection criticalSection##NameTo;\
  17.         return criticalSection##NameTo;\
  18.     }\
  19. \
  20. protected:\
  21.     void Add##NameTo##First(ClassTo* item)\
  22.     {\
  23.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  24.         METHOD_MULTI_ADDFIRST(ClassFrom, NameFrom, ClassTo, NameTo) \
  25.     }\
  26.     void Add##NameTo##Last(ClassTo* item)\
  27.     {\
  28.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  29.         METHOD_MULTI_ADDLAST(ClassFrom, NameFrom, ClassTo, NameTo) \
  30.     }\
  31.     void Add##NameTo##After(ClassTo* item, ClassTo* pos)\
  32.     {\
  33.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  34.         METHOD_MULTI_ADDAFTER(ClassFrom, NameFrom, ClassTo, NameTo) \
  35.     }\
  36.     void Add##NameTo##Before(ClassTo* item, ClassTo* pos)\
  37.     {\
  38.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  39.         METHOD_MULTI_ADDBEFORE(ClassFrom, NameFrom, ClassTo, NameTo) \
  40.     }\
  41.     void Remove##NameTo(ClassTo* item)\
  42.     {\
  43.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  44.         METHOD_MULTI_REMOVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  45.     }\
  46.     void Replace##NameTo(ClassTo* item, ClassTo* newItem)\
  47.     {\
  48.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  49.         METHOD_MULTI_REPLACE(ClassFrom, NameFrom, ClassTo, NameTo) \
  50.     }\
  51. \
  52. public:\
  53.     void DeleteAll##NameTo()\
  54.     {\
  55.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  56.         METHOD_MULTI_DELETEALL(ClassFrom, NameFrom, ClassTo, NameTo) \
  57.     }\
  58.     ClassTo* GetFirst##NameTo() const\
  59.     {\
  60.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  61.         METHOD_MULTI_GETFIRST(ClassFrom, NameFrom, ClassTo, NameTo) \
  62.     }\
  63.     ClassTo* GetLast##NameTo() const\
  64.     {\
  65.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  66.         METHOD_MULTI_GETLAST(ClassFrom, NameFrom, ClassTo, NameTo) \
  67.     }\
  68.     ClassTo* GetNext##NameTo(ClassTo* pos) const\
  69.     {\
  70.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  71.         METHOD_MULTI_GETNEXT(ClassFrom, NameFrom, ClassTo, NameTo) \
  72.     }\
  73.     ClassTo* GetPrev##NameTo(ClassTo* pos) const\
  74.     {\
  75.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  76.         METHOD_MULTI_GETPREV(ClassFrom, NameFrom, ClassTo, NameTo) \
  77.     }\
  78.     int Get##NameTo##Count() const\
  79.     {\
  80.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  81.         METHOD_MULTI_GETCOUNT(ClassFrom, NameFrom, ClassTo, NameTo) \
  82.     }\
  83.     void Move##NameTo##First(ClassTo* item)\
  84.     {\
  85.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  86.         METHOD_MULTI_MOVEFIRST(ClassFrom, NameFrom, ClassTo, NameTo) \
  87.     }\
  88.     void Move##NameTo##Last(ClassTo* item)\
  89.     {\
  90.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  91.         METHOD_MULTI_MOVELAST(ClassFrom, NameFrom, ClassTo, NameTo) \
  92.     }\
  93.     void Move##NameTo##After(ClassTo* item, ClassTo* pos)\
  94.     {\
  95.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  96.         METHOD_MULTI_MOVEAFTER(ClassFrom, NameFrom, ClassTo, NameTo) \
  97.     }\
  98.     void Move##NameTo##Before(ClassTo* item, ClassTo* pos)\
  99.     {\
  100.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  101.         METHOD_MULTI_MOVEBEFORE(ClassFrom, NameFrom, ClassTo, NameTo) \
  102.     }\
  103.     void Sort##NameTo(int (*comp)(ClassTo*, ClassTo*))\
  104.     {\
  105.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  106.         METHOD_MULTI_SORT(ClassFrom, NameFrom, ClassTo, NameTo) \
  107.     }\
  108.     ITERATOR_TEMPLATE_MULTI_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  109.  
  110. #define RELATION_TEMPLATE_NOFILTER_CRITICAL_MULTI_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  111. public:\
  112.     ClassTo* _first##NameTo;\
  113.     ClassTo* _last##NameTo;\
  114.     int _count##NameTo;\
  115. \
  116.     static CriticalSection& CriticalSection##NameTo()\
  117.     {\
  118.         static CriticalSection criticalSection##NameTo;\
  119.         return criticalSection##NameTo;\
  120.     }\
  121. \
  122. protected:\
  123.     void Add##NameTo##First(ClassTo* item)\
  124.     {\
  125.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  126.         METHOD_MULTI_ADDFIRST(ClassFrom, NameFrom, ClassTo, NameTo) \
  127.     }\
  128.     void Add##NameTo##Last(ClassTo* item)\
  129.     {\
  130.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  131.         METHOD_MULTI_ADDLAST(ClassFrom, NameFrom, ClassTo, NameTo) \
  132.     }\
  133.     void Add##NameTo##After(ClassTo* item, ClassTo* pos)\
  134.     {\
  135.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  136.         METHOD_MULTI_ADDAFTER(ClassFrom, NameFrom, ClassTo, NameTo) \
  137.     }\
  138.     void Add##NameTo##Before(ClassTo* item, ClassTo* pos)\
  139.     {\
  140.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  141.         METHOD_MULTI_ADDBEFORE(ClassFrom, NameFrom, ClassTo, NameTo) \
  142.     }\
  143.     void Remove##NameTo(ClassTo* item)\
  144.     {\
  145.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  146.         METHOD_MULTI_REMOVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  147.     }\
  148.     void Replace##NameTo(ClassTo* item, ClassTo* newItem)\
  149.     {\
  150.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  151.         METHOD_MULTI_REPLACE(ClassFrom, NameFrom, ClassTo, NameTo) \
  152.     }\
  153. \
  154. public:\
  155.     void DeleteAll##NameTo()\
  156.     {\
  157.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  158.         METHOD_MULTI_DELETEALL(ClassFrom, NameFrom, ClassTo, NameTo) \
  159.     }\
  160.     ClassTo* GetFirst##NameTo() const\
  161.     {\
  162.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  163.         METHOD_MULTI_GETFIRST(ClassFrom, NameFrom, ClassTo, NameTo) \
  164.     }\
  165.     ClassTo* GetLast##NameTo() const\
  166.     {\
  167.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  168.         METHOD_MULTI_GETLAST(ClassFrom, NameFrom, ClassTo, NameTo) \
  169.     }\
  170.     ClassTo* GetNext##NameTo(ClassTo* pos) const\
  171.     {\
  172.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  173.         METHOD_MULTI_GETNEXT(ClassFrom, NameFrom, ClassTo, NameTo) \
  174.     }\
  175.     ClassTo* GetPrev##NameTo(ClassTo* pos) const\
  176.     {\
  177.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  178.         METHOD_MULTI_GETPREV(ClassFrom, NameFrom, ClassTo, NameTo) \
  179.     }\
  180.     int Get##NameTo##Count() const\
  181.     {\
  182.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  183.         METHOD_MULTI_GETCOUNT(ClassFrom, NameFrom, ClassTo, NameTo) \
  184.     }\
  185.     void Move##NameTo##First(ClassTo* item)\
  186.     {\
  187.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  188.         METHOD_MULTI_MOVEFIRST(ClassFrom, NameFrom, ClassTo, NameTo) \
  189.     }\
  190.     void Move##NameTo##Last(ClassTo* item)\
  191.     {\
  192.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  193.         METHOD_MULTI_MOVELAST(ClassFrom, NameFrom, ClassTo, NameTo) \
  194.     }\
  195.     void Move##NameTo##After(ClassTo* item, ClassTo* pos)\
  196.     {\
  197.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  198.         METHOD_MULTI_MOVEAFTER(ClassFrom, NameFrom, ClassTo, NameTo) \
  199.     }\
  200.     void Move##NameTo##Before(ClassTo* item, ClassTo* pos)\
  201.     {\
  202.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  203.         METHOD_MULTI_MOVEBEFORE(ClassFrom, NameFrom, ClassTo, NameTo) \
  204.     }\
  205.     void Sort##NameTo(int (*comp)(ClassTo*, ClassTo*))\
  206.     {\
  207.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  208.         METHOD_MULTI_SORT(ClassFrom, NameFrom, ClassTo, NameTo) \
  209.     }\
  210.     ITERATOR_TEMPLATE_NOFILTER_MULTI_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  211.  
  212. #define RELATION_CRITICAL_MULTI_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  213. public:\
  214.     ClassTo* _first##NameTo;\
  215.     ClassTo* _last##NameTo;\
  216.     int _count##NameTo;\
  217. \
  218. public:\
  219.     static CriticalSection _criticalSection##NameTo;\
  220. \
  221.     static CriticalSection& CriticalSection##NameTo() { return _criticalSection##NameTo; }\
  222. \
  223. protected:\
  224.     void Add##NameTo##First(ClassTo* item);\
  225.     void Add##NameTo##Last(ClassTo* item);\
  226.     void Add##NameTo##After(ClassTo* item, ClassTo* pos);\
  227.     void Add##NameTo##Before(ClassTo* item, ClassTo* pos);\
  228.     void Remove##NameTo(ClassTo* item);\
  229.     void Replace##NameTo(ClassTo* item, ClassTo* newItem);\
  230. \
  231. public:\
  232.     void DeleteAll##NameTo();\
  233.     ClassTo* GetFirst##NameTo() const;\
  234.     ClassTo* GetLast##NameTo() const;\
  235.     ClassTo* GetNext##NameTo(ClassTo* pos) const;\
  236.     ClassTo* GetPrev##NameTo(ClassTo* pos) const;\
  237.     int Get##NameTo##Count() const;\
  238.     void Move##NameTo##First(ClassTo* item);\
  239.     void Move##NameTo##Last(ClassTo* item);\
  240.     void Move##NameTo##After(ClassTo* item, ClassTo* pos);\
  241.     void Move##NameTo##Before(ClassTo* item, ClassTo* pos);\
  242.     void Sort##NameTo(int (*comp)(ClassTo*, ClassTo*));\
  243.     ITERATOR_MULTI_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  244.  
  245. #define RELATION_NOFILTER_CRITICAL_MULTI_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  246. public:\
  247.     ClassTo* _first##NameTo;\
  248.     ClassTo* _last##NameTo;\
  249.     int _count##NameTo;\
  250. \
  251. public:\
  252.     static CriticalSection _criticalSection##NameTo;\
  253. \
  254.     static CriticalSection& CriticalSection##NameTo() { return _criticalSection##NameTo; }\
  255. \
  256. protected:\
  257.     void Add##NameTo##First(ClassTo* item);\
  258.     void Add##NameTo##Last(ClassTo* item);\
  259.     void Add##NameTo##After(ClassTo* item, ClassTo* pos);\
  260.     void Add##NameTo##Before(ClassTo* item, ClassTo* pos);\
  261.     void Remove##NameTo(ClassTo* item);\
  262.     void Replace##NameTo(ClassTo* item, ClassTo* newItem);\
  263. \
  264. public:\
  265.     void DeleteAll##NameTo();\
  266.     ClassTo* GetFirst##NameTo() const;\
  267.     ClassTo* GetLast##NameTo() const;\
  268.     ClassTo* GetNext##NameTo(ClassTo* pos) const;\
  269.     ClassTo* GetPrev##NameTo(ClassTo* pos) const;\
  270.     int Get##NameTo##Count() const;\
  271.     void Move##NameTo##First(ClassTo* item);\
  272.     void Move##NameTo##Last(ClassTo* item);\
  273.     void Move##NameTo##After(ClassTo* item, ClassTo* pos);\
  274.     void Move##NameTo##Before(ClassTo* item, ClassTo* pos);\
  275.     void Sort##NameTo(int (*comp)(ClassTo*, ClassTo*));\
  276.     ITERATOR_NOFILTER_MULTI_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  277.  
  278. #define RELATION_CRITICAL_MULTI_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  279.     RELATION_CRITICAL_MULTI_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  280.  
  281. #define INIT_CRITICAL_MULTI_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  282. {\
  283.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  284.     INIT_MULTI_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  285. }
  286.  
  287. #define EXIT_CRITICAL_MULTI_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  288. {\
  289.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  290.     EXIT_MULTI_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  291. }
  292.  
  293. #define REPLACE_CRITICAL_MULTI_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  294. {\
  295.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  296.     REPLACE_MULTI_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  297. }
  298.  
  299. #define INIT_CRITICAL_MULTI_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  300. {\
  301.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  302.     INIT_MULTI_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  303. }
  304.  
  305. #define EXIT_CRITICAL_MULTI_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  306. {\
  307.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  308.     EXIT_MULTI_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  309. }
  310.  
  311. #define REPLACE_CRITICAL_MULTI_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  312. {\
  313.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  314.     REPLACE_MULTI_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  315. }
  316.  
  317. #define REMOVE_CRITICAL_MULTI_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  318. {\
  319.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  320.     REMOVE_MULTI_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  321. }
  322.  
  323. #define SAVE_CRITICAL_MULTI_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  324. {\
  325.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  326.     SAVE_MULTI_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  327. }
  328.  
  329. #define RESTORE_CRITICAL_MULTI_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  330. {\
  331.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  332.     RESTORE_MULTI_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  333. }
  334.  
  335. #define REMOVE_CRITICAL_MULTI_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  336. {\
  337.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  338.     REMOVE_MULTI_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  339. }
  340.  
  341. #define CLEANUP_CRITICAL_MULTI_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  342. {\
  343.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  344.     CLEANUP_MULTI_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  345. }
  346.  
  347. #define METHODS_CRITICAL_MULTI_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  348.     CriticalSection ClassFrom##::_criticalSection##NameTo;\
  349. void ClassFrom##::Add##NameTo##First(ClassTo* item)\
  350. {\
  351.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  352.     METHOD_MULTI_ADDFIRST(ClassFrom, NameFrom, ClassTo, NameTo) \
  353. }\
  354. \
  355. void ClassFrom##::Add##NameTo##Last(ClassTo* item)\
  356. {\
  357.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  358.     METHOD_MULTI_ADDLAST(ClassFrom, NameFrom, ClassTo, NameTo) \
  359. }\
  360. \
  361. void ClassFrom##::Add##NameTo##After(ClassTo* item, ClassTo* pos)\
  362. {\
  363.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  364.     METHOD_MULTI_ADDAFTER(ClassFrom, NameFrom, ClassTo, NameTo) \
  365. }\
  366. \
  367. void ClassFrom##::Add##NameTo##Before(ClassTo* item, ClassTo* pos)\
  368. {\
  369.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  370.     METHOD_MULTI_ADDBEFORE(ClassFrom, NameFrom, ClassTo, NameTo) \
  371. }\
  372. \
  373. void ClassFrom##::Remove##NameTo(ClassTo* item)\
  374. {\
  375.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  376.     METHOD_MULTI_REMOVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  377. }\
  378. \
  379. void ClassFrom##::DeleteAll##NameTo()\
  380. {\
  381.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  382.     METHOD_MULTI_DELETEALL(ClassFrom, NameFrom, ClassTo, NameTo) \
  383. }\
  384. \
  385. void ClassFrom##::Replace##NameTo(ClassTo* item, ClassTo* newItem)\
  386. {\
  387.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  388.     METHOD_MULTI_REPLACE(ClassFrom, NameFrom, ClassTo, NameTo) \
  389. }\
  390. \
  391. ClassTo* ClassFrom##::GetFirst##NameTo() const\
  392. {\
  393.     METHOD_MULTI_GETFIRST(ClassFrom, NameFrom, ClassTo, NameTo) \
  394. }\
  395. \
  396. ClassTo* ClassFrom##::GetLast##NameTo() const\
  397. {\
  398.     METHOD_MULTI_GETLAST(ClassFrom, NameFrom, ClassTo, NameTo) \
  399. }\
  400. \
  401. ClassTo* ClassFrom##::GetNext##NameTo(ClassTo* pos) const\
  402. {\
  403.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  404.     METHOD_MULTI_GETNEXT(ClassFrom, NameFrom, ClassTo, NameTo) \
  405. }\
  406. \
  407. ClassTo* ClassFrom##::GetPrev##NameTo(ClassTo* pos) const\
  408. {\
  409.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  410.     METHOD_MULTI_GETPREV(ClassFrom, NameFrom, ClassTo, NameTo) \
  411. }\
  412. \
  413. int ClassFrom##::Get##NameTo##Count() const\
  414. {\
  415.     METHOD_MULTI_GETCOUNT(ClassFrom, NameFrom, ClassTo, NameTo) \
  416. }\
  417. \
  418. void ClassFrom##::Move##NameTo##First(ClassTo* item)\
  419. {\
  420.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  421.     METHOD_MULTI_MOVEFIRST(ClassFrom, NameFrom, ClassTo, NameTo) \
  422. }\
  423. \
  424. void ClassFrom##::Move##NameTo##Last(ClassTo* item)\
  425. {\
  426.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  427.     METHOD_MULTI_MOVELAST(ClassFrom, NameFrom, ClassTo, NameTo) \
  428. }\
  429. \
  430. void ClassFrom##::Move##NameTo##After(ClassTo* item, ClassTo* pos)\
  431. {\
  432.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  433.     METHOD_MULTI_MOVEAFTER(ClassFrom, NameFrom, ClassTo, NameTo) \
  434. }\
  435. \
  436. void ClassFrom##::Move##NameTo##Before(ClassTo* item, ClassTo* pos)\
  437. {\
  438.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  439.     METHOD_MULTI_MOVEBEFORE(ClassFrom, NameFrom, ClassTo, NameTo) \
  440. }\
  441. \
  442. void ClassFrom##::Sort##NameTo##(int (*comp)(ClassTo*, ClassTo*))\
  443. {\
  444.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  445.     METHOD_MULTI_SORT(ClassFrom, NameFrom, ClassTo, NameTo) \
  446. }
  447.  
  448. #define METHODS_CRITICAL_MULTI_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  449.  
  450. #endif